#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
//
//class Person {
//public:
//	// 虚函数
//	virtual void BuyTicket() {
//		cout << "Person: 买票-全价 100￥" << endl;
//	}
//};
//class Student : public Person {
//public:
//	// 虚函数 + 函数名/参数/返回 -> 重写（覆盖）
//	void BuyTicket() {
//		cout << "Student: 买票-半价 50￥" << endl;
//	}
//};
//class Soldier : public Person {
//public:
//	// 虚函数 + 函数名/参数/返回 -> 重写（覆盖）
//	void BuyTicket() {
//		cout << "Student: 优先买预留票-全价 100￥" << endl;
//	}
//};
//
///* 接收身份 */
//void Pay(Person& ptr) {
//	ptr.BuyTicket();  // 到底是谁在买票，取决于传来的是谁
//}

//int main()
//{
//	int option = 0;
//	Person p;
//	Student st;
//	Soldier so;
//
//	do {
//		cout << "1.普通人  2.学生  3.军人" << endl;
//		cout << "请选择身份：";
//		cin >> option;
//		switch (option)
//		{
//		case 1:
//			Pay(p);
//			break;
//		case 2:
//			Pay(st);
//			break;
//		case 3:
//			Pay(so);
//			break;
//		default:
//			cout << "输入错误！请重新输入！" << endl;
//			break;
//		}
//
//	} while (option != -1);
//
//	return 0;
//}

//int main(void)
//{
//	int option = 0;
//
//	do {
//		cout << "1.普通人  2.学生  3.军人" << endl;
//		cout << "请选择身份：";
//		cin >> option;
//
//		cout << "请输入你的姓名：";
//		string name;
//		cin >> name;
//
//		switch (option) {
//		case 1: {
//			Person p(name.c_str());
//			Pay(p);
//			break;
//		}
//		case 2: {
//			Student st(name.c_str());
//			Pay(st);
//			break;
//		}
//		case 3: {
//			Soldier so(name.c_str());
//			break;
//		}
//		default:
//			cout << "输入错误！请重新输入！" << endl;
//			break;
//		}
//		cout << endl;
//	} while (option != -1);
//
//	return 0;
//}

//class Person {
//public:
//	Person(const char* name)
//		: _name(name) {}
//
//	// 虚函数
//	virtual void BuyTicket() {
//		cout << _name << ": " << "Person: 买票 - 全价 100￥" << endl;
//	}
//
//protected:
//	string _name;
//};

//class Student : public Person {
//public:
//	Student(const char* name)
//		: Person(name) {}
//
//	// 虚函数 + 函数名/参数/返回 -> 重写（覆盖）
//	virtual void BuyTicket() {
//		cout << _name << ": " << "Student: 买票-半价 50￥" << endl;
//	}
//};
//
//class Soldier : public Person {
//public:
//	Soldier(const char* name)
//		: Person(name) {}
//
//	// 虚函数 + 函数名/参数/返回 -> 重写（覆盖）
//	virtual void BuyTicket() {
//		cout << _name << ": " << "Soldier: 优先买预留票-全价 100￥" << endl;
//	}
//};/* 接收身份 */
//void Pay(Person* ptr) {
//	ptr->BuyTicket();  // 到底是谁在买票，取决于传来的是谁
//	delete ptr;
//}

//int main(void)
//{
//	int option = 0;
//
//	//Person p;
//	//Student st;
//	//Soldier so;
//
//	do {
//		cout << "1.普通人  2.学生  3.军人" << endl;
//		cout << "请选择身份：";
//		cin >> option;
//
//		cout << "请输入你的姓名：";
//		string name;
//		cin >> name;
//
//		switch (option) {
//		case 1:
//			Pay(new Person(name.c_str()));
//			break;
//		case 2:
//			Pay(new Student(name.c_str()));
//			break;
//		case 3:
//			Pay(new Soldier(name.c_str()));
//			break;
//		default:
//			cout << "输入错误！请重新输入！" << endl;
//			break;
//		}
//		cout << endl;
//	} while (option != -1);
//
//	return 0;
//}



//
//class Person {
//public:
//	Person(const char* name)
//		: _name(name) {}
//
//	// 虚函数
//	virtual void BuyTicket() {
//		cout << _name << ": " << "Person: 买票 - 全价 100￥" << endl;
//	}
//
//protected:
//	string _name;
//};
//
//class Student : public Person {
//public:
//	Student(const char* name)
//		: Person(name) {}
//
//	// 虚函数 + 函数名/参数/返回 -> 重写（覆盖）
//	virtual void BuyTicket() {
//		cout << _name << ": " << "Student: 买票-半价 50￥" << endl;
//	}
//};
//
//class Soldier : public Person {
//public:
//	Soldier(const char* name)
//		: Person(name) {}
//
//	// 虚函数 + 函数名/参数/返回 -> 重写（覆盖）
//	virtual void BuyTicket() {
//		cout << _name << ": " << "Soldier: 优先买预留票-全价 100￥" << endl;
//	}
//};
//
///* 接收身份 */
//void Pay(Person* ptr) {
//	ptr->BuyTicket();  // 到底是谁在买票，取决于传来的是谁
//	delete ptr;
//}
//
//int main(void)
//{
//	int option = 0;
//
//	//Person p;
//	//Student st;
//	//Soldier so;
//
//	do {
//		cout << "1.普通人  2.学生  3.军人" << endl;
//		cout << "请选择身份：";
//		cin >> option;
//
//		cout << "请输入你的姓名：";
//		string name;
//		cin >> name;
//
//		switch (option) {
//		case 1:
//			Pay(new Person(name.c_str()));
//			break;
//		case 2:
//			Pay(new Student(name.c_str()));
//			break;
//		case 3:
//			Pay(new Soldier(name.c_str()));
//			break;
//		default:
//			cout << "输入错误！请重新输入！" << endl;
//			break;
//		}
//		cout << endl;
//	} while (option != -1);
//
//	return 0;
//}
